package com.atguigu.sql.dataframe

import com.atguigu.sql.util.MySparkSessionUtil
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.Dataset

/**
 * description ：DataSetDemo 测试类
 * author      ：剧情再美终是戏 
 * mail        : 13286520398@163.com
 * date        ：Created in 2020/1/11 11:01
 * modified By ：
 * version:    : 1.0
 */
object DsDemo {

  /**
   * TODO rdd -> ds 可以自动识别类型，并且有强类型限制 Dataset[User] Dataset[T]
   **/

  def main(args: Array[String]): Unit = {

    // 获取 sparkSession 对象
    val spark = MySparkSessionUtil.get(args)

    // TODO 从样例类转化为ds
    {
      val rdd: RDD[String] = spark.sparkContext.textFile("c:/user.txt")

      // 转换RDD[User]
      val rdd2: RDD[User] = rdd.map {
        line =>
          val splits = line.split("\t")
          User(splits(0).toInt, splits(1))
      }

      // 将rdd转换为df
      import spark.implicits._
      val ds: Dataset[User] = rdd2.toDS()

      // 存为临时表
      ds.createTempView("user")

      // sql查询
      spark.sql("select * from user").show
    }

    // 关闭 sparkSession 资源
    MySparkSessionUtil.close(spark)
  }

  case class User(age: Int, name: String) extends Serializable

}
